package com.hoe.tsb.fraft.enums;

import com.hoe.tsb.fraft.serialize.EnumsSerializer;

/**
 * <p>
 * FRaft的角色（最多14个角色）
 * </p>
 *
 * @author hoe
 * @version 1.0
 * @date 2022/11/24
 */
public enum RoleType implements EnumsSerializer<RoleType> {
    /**
     * 跟随者
     */
    FOLLOWER,

    /**
     * 候选者
     */
    CANDIDATE,

    /**
     * 领导者
     */
    LEADER;

    public static Integer ser(RoleType enu) {
        if (enu == null) {
            return 0xF;
        }
        return RoleType.values()[0].serialize(enu);
    }

    /**
     * 反序列化枚举本身
     * @param ordinal 枚举下标
     * @return 枚举
     */
    public static RoleType des(Integer ordinal) {
        if (ordinal == null || (ordinal & 0xF) == 0xF) {
            return null;
        }
        return (RoleType) RoleType.values()[0].deserialize(ordinal);
    }
}
